home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / reviewed / volume01 / mawk / 1.1 / patch02a < prev    next >
Encoding:
Internet Message Format  |  1992-10-13  |  60.1 KB

  1. From: Mike Brennan <brennan@boeing.com>
  2. Subject: v02i028: mawk - (Ver. 1.1) An interpreter for the AWK language, Patch02a/4
  3. Newsgroups: comp.sources.reviewed
  4. Approved: csr@calvin.dgbt.doc.ca
  5.  
  6. Submitted-by: Mike Brennan <brennan@boeing.com>
  7. Posting-number: Volume 2, Issue 28
  8. Archive-name: mawk/patch02a
  9. Patch-To: mawk: Volume 1, Issue 50-68
  10.  
  11. This is patch2 for mawk1.1 which updates mawk1.1.1 to mawk1.1.2
  12.  
  13. The changes fix all bugs reported since 1.1.1, and add
  14. new configurations for aix, convex and sysVr4i386.
  15. See the file PATCHES for more details.
  16.  
  17.  
  18. Unpack the parts in order.
  19. To install the patch read the comments in the executable
  20. /bin/sh script, apply2.sh and then execute it.
  21.  
  22.  
  23. #!/bin/sh
  24. # This is a shell archive (produced by shar 3.50)
  25. # To extract the files from this archive, save it to a file, remove
  26. # everything above the "!/bin/sh" line above, and type "sh file_name".
  27. #
  28. # made 10/09/1992 16:59 UTC by brennan@mlssun12
  29. # Source directory /usr/brennan/mawk/X
  30. #
  31. # existing files will NOT be overwritten unless -c is specified
  32. #
  33. # This is part 1 of a multipart archive                                    
  34. # do not concatenate these parts, unpack them in order with /bin/sh        
  35. #
  36. # This shar contains:
  37. # length  mode       name
  38. # ------ ---------- ------------------------------------------
  39. #    822 -rwxr-xr-x apply2.sh
  40. # 107075 -rw-r--r-- diffs2
  41. #  91455 -rw-r--r-- Xparse.c
  42. #   1671 -rw-r--r-- Xparse.h
  43. #  22396 -rw-r--r-- doc.diff
  44. #
  45. if test -r _shar_seq_.tmp; then
  46.     echo 'Must unpack archives in sequence!'
  47.     echo Please unpack part `cat _shar_seq_.tmp` next
  48.     exit 1
  49. fi
  50. # ============= apply2.sh ==============
  51. if test -f 'apply2.sh' -a X"$1" != X"-c"; then
  52.     echo 'x - skipping apply2.sh (File already exists)'
  53.     rm -f _shar_wnt_.tmp
  54. else
  55. > _shar_wnt_.tmp
  56. echo 'x - extracting apply2.sh (Text)'
  57. sed 's/^X//' << 'SHAR_EOF' > 'apply2.sh' &&
  58. #!/bin/sh
  59. X
  60. #   apply2.sh
  61. X
  62. X
  63. # move the following files to your mawk directory
  64. # and  execute this script
  65. #
  66. #
  67. #   apply2.sh    -- this script
  68. #   diffs2
  69. #   Xparse.h
  70. #   Xparse.c
  71. #   doc.diff
  72. #
  73. X
  74. X
  75. ######## the old parse.[ch] get removed ##########
  76. #  if you want to save them, move them someplace else
  77. #  (there's no good reason to save them)
  78. X
  79. rm -f parse.c
  80. rm -f parse.h
  81. X
  82. ########################################
  83. X
  84. X
  85. mv  Xparse.h  parse.h
  86. mv  Xparse.c  parse.c
  87. X
  88. X
  89. echo ignore warnings from mkdir
  90. patch -s -p1 < diffs2
  91. X
  92. X
  93. ############
  94. #
  95. # some users with troff may not have bothered with mawk.doc
  96. # so don't patch it if we cannot find it
  97. #
  98. X
  99. (
  100. X  cd man
  101. X
  102. X  if test -f mawk.doc
  103. X    then
  104. X      patch -s < ../doc.diff
  105. X
  106. X    else
  107. X      echo 'cannot find "mawk.doc"'
  108. X      echo You do not need it if you can format mawk.1
  109. X
  110. X  fi
  111. X      
  112. )
  113. SHAR_EOF
  114. chmod 0755 apply2.sh ||
  115. echo 'restore of apply2.sh failed'
  116. Wc_c="`wc -c < 'apply2.sh'`"
  117. test 822 -eq "$Wc_c" ||
  118.     echo 'apply2.sh: original size 822, current size' "$Wc_c"
  119. rm -f _shar_wnt_.tmp
  120. fi
  121. # ============= diffs2 ==============
  122. if test -f 'diffs2' -a X"$1" != X"-c"; then
  123.     echo 'x - skipping diffs2 (File already exists)'
  124.     rm -f _shar_wnt_.tmp
  125. else
  126. > _shar_wnt_.tmp
  127. echo 'x - extracting diffs2 (Text)'
  128. sed 's/^X//' << 'SHAR_EOF' > 'diffs2' &&
  129. *** mawk/ACKNOWLEDGMENT    Tue Mar  3 17:28:56 1992
  130. --- mawk112/ACKNOWLEDGMENT    Wed Aug 26 20:47:27 1992
  131. ***************
  132. *** 18,21 ****
  133. --- 18,22 ----
  134. X      Mike Carlton        Next 2.1
  135. X      Elliot Jaffe        AIX 3.1
  136. +     Jeremy Martin        Convex 9.1
  137. X  
  138. X  The DOS version is a lot better thanks to suggestions and testing
  139. ***************
  140. *** 26,28 ****
  141. X  explained some of the "dark corners".
  142. X  
  143. --- 27,30 ----
  144. X  explained some of the "dark corners".
  145. X  
  146. ! Thank you to everyone who reported bugs or offered encouragement,
  147. ! suggestions or criticism. (At least the bugs got fixed).
  148. *** mawk/Makefile.in    Tue Mar  3 17:29:04 1992
  149. --- mawk112/Makefile.in    Thu Jun 11 13:33:58 1992
  150. ***************
  151. *** 44,48 ****
  152. X  #AWK= mawk  # or gawk or nawk or awk
  153. X  #FIX_YTAB=$(AWK) -f modbison.awk 
  154. ! #               uncomment this with bison 1.14
  155. X  #                      don't use an earlier version
  156. X  
  157. --- 44,48 ----
  158. X  #AWK= mawk  # or gawk or nawk or awk
  159. X  #FIX_YTAB=$(AWK) -f modbison.awk 
  160. ! #               uncomment this with bison 1.14 or 1.18
  161. X  #                      don't use an earlier version
  162. X  
  163. *** mawk/NEW    Tue Mar  3 17:22:54 1992
  164. --- mawk112/NEW    Wed Jul  8 09:04:54 1992
  165. ***************
  166. *** 57,78 ****
  167. X  
  168. X  
  169. - length   is no longer valid must be length() or length(expr)
  170. -       (programs that fail can be run through
  171. -     examples/ct_length.awk,
  172. -        ct stands for cold turkey)
  173. - [WARNING: THIS BREAKS SOME OLD AWK SCRIPTS.
  174. - Mawk1.1 does not support length without arguments, because
  175. -     (1) It's not in the posix draft.
  176. -     (2) It's not in the AWK book.
  177. -     (3) It's inconsistent with the overall language design.
  178. - Those who disagree with this decision enough to complain should
  179. - put "pointy-headed purist" somewhere in their Subject: line.
  180. - ]
  181. X  printf and sprintf are ANSI C compatible, you can for example
  182. X  
  183. --- 57,60 ----
  184. *** mawk/PATCHES    Tue Mar  3 17:28:54 1992
  185. --- mawk112/PATCHES    Wed Aug 26 21:03:08 1992
  186. ***************
  187. *** 1,5 ****
  188. X  
  189. X  
  190. ! patch1:  mawk1.1 to mawk1.1.1
  191. X  
  192. X  1) fixed bug which caused 
  193. --- 1,65 ----
  194. X  
  195. + patch2:  mawk1.1.1 -> mawk1.1.2   26 Aug 92
  196. X  
  197. ! 1)  Comparisons are done as described the AWK book, which is the
  198. !     same as mawk1.0.  Evidently I lack the requisite mental facilities
  199. !     to understand posix comparisons , i.e.
  200. !       echo 0 | mawk '$0 == "0000" { print "true" }'
  201. !       true
  202. !     was a major bozo.
  203. ! 2)  If n = split(s, X, r) , then all elements other than
  204. !     X[1..n] are now deleted from X.  This behavior is 
  205. !     consistent with other awks.
  206. ! 3)  foo = "foo"
  207. !     foo++ evaluates to 0 and value of foo is 1
  208. !     old behavior was foo++ was "foo" and foo then set to 1
  209. ! 4)  Fixed two bugs in regular expression lexical scanner:
  210. !     [c1-c2] did not work right if c2 was an escaped character.
  211. !     function do_str() which collected runs of characters did
  212. !     not work right if the last character was escaped and the run
  213. !     ended with * + or ?.
  214. ! 5)  You can now read and write to the same file.  E.g.
  215. !     printf "Enter:  " > "/dev/tty"
  216. !     getline answer < "/dev/tty"
  217. ! 6)  Output to files which are ttys is now unbuffered.
  218. ! 7)  FILENAME and FNR retain their value from the last record in
  219. !     the END section.  
  220. ! 8)  man pages might groff.
  221. ! 9)  New configuration files
  222. !     aix.h  convex.h  sysVr4i386.h
  223. ! 10) Better error recovery for bungled function definitions
  224. !     via new productions
  225. !     program_block : outside_error block ;
  226. !     error : outside_error ;
  227. ! 11) If i > NF , then ++$i , $i++, g?sub(r,s,$i), now work
  228. !     correctly.
  229. ! 12) MsDOS, interactive input: terminating a line with ^Z
  230. !     works correctly (at least with TC++ compiler).
  231. ! l3) string_buff had too many users which induced an error in
  232. !     sprintf().  After parsing, string_buff is now only be used
  233. !     by sprintf().
  234. !     (Old fart seduced by subliminal common block).
  235. ! --------------------------------------------------
  236. ! patch1:  mawk1.1 to mawk1.1.1     (mar 92)
  237. X  
  238. X  1) fixed bug which caused 
  239. *** mawk/UCONFIG    Tue Mar  3 17:28:58 1992
  240. --- mawk112/UCONFIG    Wed Aug 26 20:35:14 1992
  241. ***************
  242. *** 24,27 ****
  243. --- 24,28 ----
  244. X  sysVsco                gcc
  245. X  sysV_ieeefp
  246. + sysVr4i386            gcc rcc
  247. X  xenix_r2
  248. X  stardentVr3
  249. ***************
  250. *** 33,36 ****
  251. --- 34,38 ----
  252. X  sgi
  253. X  aix
  254. + convex
  255. X  
  256. X  atarist                cross compile with gcc
  257. ***************
  258. *** 90,93 ****
  259. --- 92,97 ----
  260. X       math libraries support the IEEE754 standard )
  261. X  
  262. + sysVr4i386
  263. +     Tested on ESIX and Consensys.
  264. X  
  265. X  stardentVr3
  266. *** mawk/array.c    Tue Mar  3 17:23:04 1992
  267. --- mawk112/array.c    Fri Aug 14 13:07:29 1992
  268. ***************
  269. *** 2,6 ****
  270. X  /********************************************
  271. X  array.c
  272. ! copyright 1991, Michael D. Brennan
  273. X  
  274. X  This is a source file for mawk, an implementation of
  275. --- 2,6 ----
  276. X  /********************************************
  277. X  array.c
  278. ! copyright 1991, 1992.  Michael D. Brennan
  279. X  
  280. X  This is a source file for mawk, an implementation of
  281. ***************
  282. *** 11,15 ****
  283. X  ********************************************/
  284. X  
  285. ! /* $Log:    array.c,v $
  286. X   * Revision 5.1  91/12/05  07:55:32  brennan
  287. X   * 1.1 pre-release
  288. --- 11,21 ----
  289. X  ********************************************/
  290. X  
  291. ! /* $Log: array.c,v $
  292. !  * Revision 5.2  1992/04/07  17:17:31  brennan
  293. !  * patch 2
  294. !  * n = split(s,A,r)
  295. !  * delete A[i] if i not in 1..n
  296. !  * This is consistent with [ng]?awk
  297. !  *
  298. X   * Revision 5.1  91/12/05  07:55:32  brennan
  299. X   * 1.1 pre-release
  300. ***************
  301. *** 31,34 ****
  302. --- 37,41 ----
  303. X  static ANODE *PROTO(find_by_dval, (ARRAY, double, int)) ;
  304. X  static void PROTO(load_array_ov, (ARRAY) ) ;
  305. + static void PROTO(ilist_delete, (ARRAY, ANODE*)) ;
  306. X  
  307. X  
  308. ***************
  309. *** 60,74 ****
  310. X     ANODE *q = 0 ; /* holds first deleted ANODE */
  311. X  
  312. !    while ( p )
  313. !    {
  314. X       if ( p->sval )
  315. !      { if ( strcmp(s,p->sval->str) == 0 )  return p ; }
  316. !      else /* its deleted, mark with q */
  317. !      if ( ! q )  q = p ;  
  318. X  
  319. !      p = p->link ;
  320. !    }
  321. !    /* not there */
  322. X     if ( cflag )
  323. X     {
  324. --- 67,83 ----
  325. X     ANODE *q = 0 ; /* holds first deleted ANODE */
  326. X  
  327. !    while ( 1 )
  328. !      if ( !p )  goto not_there ;
  329. !      else 
  330. X       if ( p->sval )
  331. !     if ( strcmp(s,p->sval->str) == 0 )  return p ;
  332. !     else  p = p->link ;
  333. !      else { q = p ; p = p->link ; break ; }
  334. !     
  335. !    while ( p )  /* q is now set */
  336. !      if ( p->sval && strcmp(s,p->sval->str) == 0 )  return p ; 
  337. !      else  p = p->link ;
  338. X  
  339. ! not_there :
  340. X     if ( cflag )
  341. X     {
  342. ***************
  343. *** 203,213 ****
  344. X      default :
  345. X          ap = find_by_sval(A, string(cp), NO_CREATE) ;
  346. !         if ( ap && ap->ival >= 0 )
  347. !         {
  348. !           int index = ap->ival % A_HASH_PRIME ;
  349. !           ap = find_by_index(A, index, ap->ival, NO_CREATE) ;
  350. !           A[index].ilink = ap->ilink ;
  351. !         }
  352. X          break ;
  353. X    }
  354. --- 212,216 ----
  355. X      default :
  356. X          ap = find_by_sval(A, string(cp), NO_CREATE) ;
  357. !         if ( ap && ap->ival >= 0 ) ilist_delete(A, ap) ;
  358. X          break ;
  359. X    }
  360. ***************
  361. *** 252,256 ****
  362. --- 255,276 ----
  363. X  }
  364. X  
  365. + /* delete an ANODE from the ilist that is known
  366. +    to be there */
  367. X  
  368. + static  void  ilist_delete(A, d) 
  369. +   ARRAY A ;
  370. +   ANODE *d ;
  371. + {
  372. +   int index = d->ival % A_HASH_PRIME ;
  373. +   register ANODE *p = A[index].ilink ;
  374. +   register ANODE *q = (ANODE *) 0 ;
  375. +   while ( p != d ) { q = p ; p = p->ilink ; }
  376. +   if ( q )  q->ilink = p->ilink ;
  377. +   else  A[index].ilink = p->ilink ;
  378. + }
  379. X  /* this is called by bi_split()
  380. X     to load strings into an array
  381. ***************
  382. *** 264,267 ****
  383. --- 284,309 ----
  384. X    register int index ;
  385. X  
  386. +   { /* clear A , leaving only A[1]..A[cnt] (if exist) */
  387. +     int i ;
  388. +     ANODE *p ;
  389. +     for( i = 0 ; i < A_HASH_PRIME ; i++ )
  390. +     {
  391. +       p = A[i].link ;
  392. +       while ( p )
  393. +       {
  394. +     if ( p->sval && (p->ival <= 0 || p->ival > cnt) )
  395. +     {
  396. +       if (p->ival >= 0) ilist_delete(A, p) ;
  397. +       free_STRING(p->sval) ;
  398. +       p->sval = (STRING *) 0 ;
  399. +       cell_destroy(p->cp) ;
  400. +       ZFREE(p->cp) ;
  401. +     }
  402. +     p = p->link ;
  403. +       }
  404. +     }
  405. +   }
  406. X    if ( cnt > MAX_SPLIT )
  407. X    {
  408. *** mawk/bi_funct.c    Tue Mar  3 17:23:06 1992
  409. --- mawk112/bi_funct.c    Wed Jul  8 08:40:18 1992
  410. ***************
  411. *** 11,18 ****
  412. X  ********************************************/
  413. X  
  414. ! /* $Log:    bi_funct.c,v $
  415. !  * Revision 5.1  91/12/05  07:55:35  brennan
  416. X   * 1.1 pre-release
  417. !  * 
  418. X  */
  419. X  
  420. --- 11,21 ----
  421. X  ********************************************/
  422. X  
  423. ! /* $Log: bi_funct.c,v $
  424. !  * Revision 5.2  1992/07/08  15:43:41  brennan
  425. !  * patch2: length returns.  I am a wimp
  426. !  *
  427. !  * Revision 5.1  1991/12/05  07:55:35  brennan
  428. X   * 1.1 pre-release
  429. !  *
  430. X  */
  431. X  
  432. ***************
  433. *** 39,45 ****
  434. X  BI_REC  bi_funct[] = { /* info to load builtins */
  435. X  
  436. X  "index" , bi_index , 2, 2 ,
  437. X  "substr" , bi_substr, 2, 3,
  438. - "length" , bi_length, 0, 1,
  439. X  "sprintf" , bi_sprintf, 1, 255,
  440. X  "sin", bi_sin , 1, 1 ,
  441. --- 42,48 ----
  442. X  BI_REC  bi_funct[] = { /* info to load builtins */
  443. X  
  444. + "length" , bi_length, 0, 1, /* special must come first */
  445. X  "index" , bi_index , 2, 2 ,
  446. X  "substr" , bi_substr, 2, 3,
  447. X  "sprintf" , bi_sprintf, 1, 255,
  448. X  "sin", bi_sin , 1, 1 ,
  449. ***************
  450. *** 60,73 ****
  451. X  
  452. X  
  453. X  void bi_funct_init()
  454. ! { register BI_REC *p = bi_funct ;
  455. X    register SYMTAB *stp ;
  456. X  
  457. !   while ( p->name )
  458. X    { stp = insert( p->name ) ;
  459. X      stp->type = ST_BUILTIN ;
  460. !     stp->stval.bip = p++ ;
  461. X    }
  462. X    /* seed rand() off the clock */
  463. X    { CELL c ;
  464. --- 63,82 ----
  465. X  
  466. X  
  467. ! /* load built-in functions in symbol table */
  468. X  void bi_funct_init()
  469. ! { register BI_REC *p ; 
  470. X    register SYMTAB *stp ;
  471. X  
  472. !   /* length is special (posix bozo) */
  473. !   stp = insert(bi_funct->name) ;
  474. !   stp->type = ST_LENGTH ;
  475. !   stp->stval.bip = bi_funct ;
  476. !   for( p = bi_funct + 1 ; p->name ; p++ )
  477. X    { stp = insert( p->name ) ;
  478. X      stp->type = ST_BUILTIN ;
  479. !     stp->stval.bip = p ;
  480. X    }
  481. X    /* seed rand() off the clock */
  482. X    { CELL c ;
  483. *** mawk/bi_funct.h    Tue Mar  3 17:23:06 1992
  484. --- mawk112/bi_funct.h    Tue Apr  7 12:56:06 1992
  485. ***************
  486. *** 12,19 ****
  487. X  
  488. X  
  489. ! /* $Log:    bi_funct.h,v $
  490. !  * Revision 5.1  91/12/05  07:59:03  brennan
  491. X   * 1.1 pre-release
  492. !  * 
  493. X  */
  494. X  
  495. --- 12,19 ----
  496. X  
  497. X  
  498. ! /* $Log: bi_funct.h,v $
  499. !  * Revision 5.1  1991/12/05  07:59:03  brennan
  500. X   * 1.1 pre-release
  501. !  *
  502. X  */
  503. X  
  504. *** mawk/bi_vars.c    Tue Mar  3 17:23:08 1992
  505. --- mawk112/bi_vars.c    Fri Jul 10 09:17:33 1992
  506. ***************
  507. *** 11,18 ****
  508. X  ********************************************/
  509. X  
  510. ! /* $Log:    bi_vars.c,v $
  511. !  * Revision 5.1  91/12/05  07:55:38  brennan
  512. X   * 1.1 pre-release
  513. !  * 
  514. X  */
  515. X  
  516. --- 11,21 ----
  517. X  ********************************************/
  518. X  
  519. ! /* $Log: bi_vars.c,v $
  520. !  * Revision 5.2  1992/07/10  16:17:10  brennan
  521. !  * MsDOS: remove NO_BINMODE macro
  522. !  *
  523. !  * Revision 5.1  1991/12/05  07:55:38  brennan
  524. X   * 1.1 pre-release
  525. !  *
  526. X  */
  527. X  
  528. ***************
  529. *** 42,46 ****
  530. X  "RSTART" ,
  531. X  "SUBSEP"
  532. ! #if MSDOS  && NO_BINMODE==0
  533. X  , "BINMODE"
  534. X  #endif
  535. --- 45,49 ----
  536. X  "RSTART" ,
  537. X  "SUBSEP"
  538. ! #if MSDOS 
  539. X  , "BINMODE"
  540. X  #endif
  541. ***************
  542. *** 81,85 ****
  543. X    /* dval is already 0.0 */
  544. X  
  545. ! #if  MSDOS  && NO_BINMODE==0
  546. X    BINMODE->type = C_DOUBLE ;
  547. X  #endif
  548. --- 84,88 ----
  549. X    /* dval is already 0.0 */
  550. X  
  551. ! #if  MSDOS  
  552. X    BINMODE->type = C_DOUBLE ;
  553. X  #endif
  554. *** mawk/bi_vars.h    Tue Mar  3 17:23:08 1992
  555. --- mawk112/bi_vars.h    Fri Jul 10 09:17:35 1992
  556. ***************
  557. *** 12,19 ****
  558. X  
  559. X  
  560. ! /* $Log:    bi_vars.h,v $
  561. !  * Revision 5.1  91/12/05  07:59:05  brennan
  562. X   * 1.1 pre-release
  563. !  * 
  564. X  */
  565. X  
  566. --- 12,22 ----
  567. X  
  568. X  
  569. ! /* $Log: bi_vars.h,v $
  570. !  * Revision 5.2  1992/07/10  16:17:10  brennan
  571. !  * MsDOS: remove NO_BINMODE macro
  572. !  *
  573. !  * Revision 5.1  1991/12/05  07:59:05  brennan
  574. X   * 1.1 pre-release
  575. !  *
  576. X  */
  577. X  
  578. ***************
  579. *** 41,45 ****
  580. X  #define  SUBSEP    (bi_vars+8)
  581. X  
  582. ! #if  MSDOS  &&  NO_BINMODE==0
  583. X  #define  BINMODE   (bi_vars+9)
  584. X  #define  NUM_BI_VAR  10
  585. --- 44,48 ----
  586. X  #define  SUBSEP    (bi_vars+8)
  587. X  
  588. ! #if  MSDOS 
  589. X  #define  BINMODE   (bi_vars+9)
  590. X  #define  NUM_BI_VAR  10
  591. *** mawk/build_mawk    Tue Mar  3 17:29:00 1992
  592. --- mawk112/build_mawk    Wed Jul  8 09:37:46 1992
  593. ***************
  594. *** 86,89 ****
  595. --- 86,92 ----
  596. X      config=sysV_ieeefp.h ;;
  597. X  
  598. + sysVr4i386)
  599. +     config=sysVr4i386.h  ;;
  600. X  # SCO UNIX has ranlib, but doesn't use it for native UNIX libraries
  601. X  sysVsco)
  602. ***************
  603. *** 116,122 ****
  604. X  
  605. X  aix)
  606. !     config=generic.h ;;
  607. X  
  608. X  
  609. X  MF)  ;;
  610. X  
  611. --- 119,129 ----
  612. X  
  613. X  aix)
  614. !     config=aix.h ;;
  615. X  
  616. + convex)
  617. +     config=convex.h
  618. +     cflags='-O2 -std' ;;
  619. X  
  620. X  MF)  ;;
  621. X  
  622. ***************
  623. *** 135,139 ****
  624. X     if gcc -v  2>&1 | egrep 'version 2' >/dev/null
  625. X        then  cflags=-O2
  626. !       else  cflags=-O
  627. X     fi
  628. X  fi
  629. --- 142,146 ----
  630. X     if gcc -v  2>&1 | egrep 'version 2' >/dev/null
  631. X        then  cflags=-O2
  632. !       else  cflags='-O -traditional'
  633. X     fi
  634. X  fi
  635. ***************
  636. *** 152,164 ****
  637. X  ) > Makefile
  638. X  
  639. - [ $config = MF ]  &&  exit 0
  640. X  
  641. X  rm -f  config.h
  642. X  echo linking config/$config to config.h
  643. X  ln   config/$config  config.h
  644. X  
  645. - # make sure parse.c is not made if it exists
  646. - # it should exist
  647. - [ -f parse.c ] &&  { echo touching parse.c  ; touch parse.c ; }
  648. X  
  649. X  echo 'ready to run: make -f Makefile'
  650. --- 159,177 ----
  651. X  ) > Makefile
  652. X  
  653. X  
  654. + # make sure distribution parse.c is newer than parse.y
  655. + if [ -f parse.c ]  # should be true
  656. +    then
  657. +    echo touching parse.c  ; touch parse.c
  658. + fi
  659. X  rm -f  config.h
  660. + [ $arg1 = MF ]  &&   exit 0
  661. X  echo linking config/$config to config.h
  662. X  ln   config/$config  config.h
  663. X  
  664. X  
  665. X  echo 'ready to run: make -f Makefile'
  666. *** mawk/cast.c    Tue Mar  3 17:23:10 1992
  667. --- mawk112/cast.c    Mon Aug 17 07:15:58 1992
  668. ***************
  669. *** 12,19 ****
  670. X  
  671. X  
  672. ! /*   $Log:    cast.c,v $
  673. !  * Revision 5.1  91/12/05  07:55:41  brennan
  674. X   * 1.1 pre-release
  675. !  * 
  676. X  */
  677. X  
  678. --- 12,22 ----
  679. X  
  680. X  
  681. ! /*   $Log: cast.c,v $
  682. !  * Revision 5.2  1992/08/17  14:19:45  brennan
  683. !  * patch2: After parsing, only bi_sprintf() uses string_buff.
  684. !  *
  685. !  * Revision 5.1  1991/12/05  07:55:41  brennan
  686. X   * 1.1 pre-release
  687. !  *
  688. X  */
  689. X  
  690. ***************
  691. *** 129,133 ****
  692. X  void cast1_to_s( cp )
  693. X    register CELL *cp ;
  694. ! { register int ival ;
  695. X  
  696. X    switch( cp->type )
  697. --- 132,138 ----
  698. X  void cast1_to_s( cp )
  699. X    register CELL *cp ;
  700. ! { 
  701. !   register int ival ;
  702. !   char xbuff[260] ;
  703. X  
  704. X    switch( cp->type )
  705. ***************
  706. *** 140,149 ****
  707. X      
  708. X      if ( (double) (ival = (int) cp->dval) == cp->dval )
  709. !         (void) sprintf(string_buff, "%d", ival) ;
  710. X      else
  711. !             (void) sprintf(string_buff ,
  712. !             string(CONVFMT)->str, cp->dval) ;
  713. X  
  714. !         cp->ptr = (PTR) new_STRING(string_buff) ;
  715. X          break ;
  716. X  
  717. --- 145,153 ----
  718. X      
  719. X      if ( (double) (ival = (int) cp->dval) == cp->dval )
  720. !         (void) sprintf(xbuff, "%d", ival) ;
  721. X      else
  722. !             (void) sprintf(xbuff , string(CONVFMT)->str, cp->dval) ;
  723. X  
  724. !         cp->ptr = (PTR) new_STRING(xbuff) ;
  725. X          break ;
  726. X  
  727. ***************
  728. *** 160,164 ****
  729. X  void cast2_to_s( cp )
  730. X    register CELL *cp ;
  731. ! { register int ival ;
  732. X  
  733. X    switch( cp->type )
  734. --- 164,170 ----
  735. X  void cast2_to_s( cp )
  736. X    register CELL *cp ;
  737. ! { 
  738. !   register int ival ;
  739. !   char xbuff[260] ;
  740. X  
  741. X    switch( cp->type )
  742. ***************
  743. *** 170,179 ****
  744. X      case C_DOUBLE  :
  745. X      if ( (double) (ival = (int) cp->dval) == cp->dval )
  746. !         (void) sprintf(string_buff, "%d", ival) ;
  747. X      else
  748. !             (void) sprintf(string_buff ,
  749. !             string(CONVFMT)->str, cp->dval) ;
  750. X  
  751. !         cp->ptr = (PTR) new_STRING(string_buff) ;
  752. X          break ;
  753. X  
  754. --- 176,184 ----
  755. X      case C_DOUBLE  :
  756. X      if ( (double) (ival = (int) cp->dval) == cp->dval )
  757. !         (void) sprintf(xbuff, "%d", ival) ;
  758. X      else
  759. !             (void) sprintf(xbuff , string(CONVFMT)->str, cp->dval) ;
  760. X  
  761. !         cp->ptr = (PTR) new_STRING(xbuff) ;
  762. X          break ;
  763. X  
  764. ***************
  765. *** 198,207 ****
  766. X      case C_DOUBLE  :
  767. X      if ( (double) (ival = (int) cp->dval) == cp->dval )
  768. !         (void) sprintf(string_buff, "%d", ival) ;
  769. X      else
  770. !             (void) sprintf(string_buff ,
  771. !             string(CONVFMT)->str, cp->dval) ;
  772. X  
  773. !         cp->ptr = (PTR) new_STRING(string_buff) ;
  774. X          break ;
  775. X  
  776. --- 203,211 ----
  777. X      case C_DOUBLE  :
  778. X      if ( (double) (ival = (int) cp->dval) == cp->dval )
  779. !         (void) sprintf(xbuff, "%d", ival) ;
  780. X      else
  781. !             (void) sprintf(xbuff , string(CONVFMT)->str, cp->dval) ;
  782. X  
  783. !         cp->ptr = (PTR) new_STRING(xbuff) ;
  784. X          break ;
  785. X  
  786. *** mawk/code.c    Tue Mar  3 17:23:10 1992
  787. --- mawk112/code.c    Tue Apr  7 12:56:09 1992
  788. ***************
  789. *** 12,19 ****
  790. X  
  791. X  
  792. ! /* $Log:    code.c,v $
  793. !  * Revision 5.1  91/12/05  07:55:43  brennan
  794. X   * 1.1 pre-release
  795. !  * 
  796. X  */
  797. X  
  798. --- 12,19 ----
  799. X  
  800. X  
  801. ! /* $Log: code.c,v $
  802. !  * Revision 5.1  1991/12/05  07:55:43  brennan
  803. X   * 1.1 pre-release
  804. !  *
  805. X  */
  806. X  
  807. *** mawk/code.h    Tue Mar  3 17:23:12 1992
  808. --- mawk112/code.h    Tue Apr  7 12:56:10 1992
  809. ***************
  810. *** 12,19 ****
  811. X  
  812. X  
  813. ! /* $Log:    code.h,v $
  814. !  * Revision 5.1  91/12/05  07:59:07  brennan
  815. X   * 1.1 pre-release
  816. !  * 
  817. X  */
  818. X  
  819. --- 12,19 ----
  820. X  
  821. X  
  822. ! /* $Log: code.h,v $
  823. !  * Revision 5.1  1991/12/05  07:59:07  brennan
  824. X   * 1.1 pre-release
  825. !  *
  826. X  */
  827. X  
  828. *** mawk/da.c    Tue Mar  3 17:23:12 1992
  829. --- mawk112/da.c    Sat Jul 25 14:32:18 1992
  830. ***************
  831. *** 12,19 ****
  832. X  
  833. X  
  834. ! /* $Log:    da.c,v $
  835. !  * Revision 5.1  91/12/05  07:55:45  brennan
  836. X   * 1.1 pre-release
  837. !  * 
  838. X  */
  839. X  
  840. --- 12,23 ----
  841. X  
  842. X  
  843. ! /* $Log: da.c,v $
  844. !  * Revision 5.2  1992/07/25  21:35:25  brennan
  845. !  * patch2
  846. !  * fixed small typo on da of _PRE_DEC
  847. !  *
  848. !  * Revision 5.1  1991/12/05  07:55:45  brennan
  849. X   * 1.1 pre-release
  850. !  *
  851. X  */
  852. X  
  853. ***************
  854. *** 77,85 ****
  855. X  _POST_DEC, "post_dec",
  856. X  _PRE_INC, "pre_inc",
  857. ! _PRE_INC, "pre_dec",
  858. X  F_POST_INC, "f_post_inc",
  859. X  F_POST_DEC, "f_post_dec",
  860. X  F_PRE_INC, "f_pre_inc",
  861. ! F_PRE_INC, "f_pre_dec",
  862. X  _EQ, "eq",
  863. X  _NEQ, "neq",
  864. --- 81,89 ----
  865. X  _POST_DEC, "post_dec",
  866. X  _PRE_INC, "pre_inc",
  867. ! _PRE_DEC, "pre_dec",
  868. X  F_POST_INC, "f_post_inc",
  869. X  F_POST_DEC, "f_post_dec",
  870. X  F_PRE_INC, "f_pre_inc",
  871. ! F_PRE_DEC, "f_pre_dec",
  872. X  _EQ, "eq",
  873. X  _NEQ, "neq",
  874. *** mawk/error.c    Tue Mar  3 17:23:14 1992
  875. --- mawk112/error.c    Tue Apr  7 12:56:12 1992
  876. ***************
  877. *** 12,19 ****
  878. X  
  879. X  
  880. ! /* $Log:    error.c,v $
  881. !  * Revision 5.1  91/12/05  07:55:48  brennan
  882. X   * 1.1 pre-release
  883. !  * 
  884. X  */
  885. X  
  886. --- 12,19 ----
  887. X  
  888. X  
  889. ! /* $Log: error.c,v $
  890. !  * Revision 5.1  1991/12/05  07:55:48  brennan
  891. X   * 1.1 pre-release
  892. !  *
  893. X  */
  894. X  
  895. *** mawk/execute.c    Tue Mar  3 17:23:16 1992
  896. --- mawk112/execute.c    Tue Aug 11 08:23:00 1992
  897. ***************
  898. *** 11,18 ****
  899. X  ********************************************/
  900. X  
  901. ! /* $Log:    execute.c,v $
  902. !  * Revision 5.1  91/12/05  07:55:50  brennan
  903. X   * 1.1 pre-release
  904. !  * 
  905. X  */
  906. X  
  907. --- 11,36 ----
  908. X  ********************************************/
  909. X  
  910. ! /* $Log: execute.c,v $
  911. !  * Revision 5.5  1992/08/11  15:24:55  brennan
  912. !  * patch2: F_PUSHA and FE_PUSHA
  913. !  * If this is preparation for g?sub(r,s,$expr) or (++|--) on $expr,
  914. !  * then if expr > NF, make sure $expr is set to ""
  915. !  *
  916. !  * Revision 5.4  1992/08/11  14:51:54  brennan
  917. !  * patch2:  $expr++ is numeric even if $expr is string.
  918. !  * I forgot to do this earlier when handling x++ case.
  919. !  *
  920. !  * Revision 5.3  1992/07/08  17:03:30  brennan
  921. !  * patch 2
  922. !  * revert to version 1.0 comparisons, i.e.
  923. !  * page 44-45 of AWK book
  924. !  *
  925. !  * Revision 5.2  1992/04/20  21:40:40  brennan
  926. !  * patch 2
  927. !  * x++ is numeric, even if x is string
  928. !  *
  929. !  * Revision 5.1  1991/12/05  07:55:50  brennan
  930. X   * 1.1 pre-release
  931. !  *
  932. X  */
  933. X  
  934. ***************
  935. *** 138,142 ****
  936. X  
  937. X          case  F_PUSHA :
  938. !             if ( (CELL*)cdp->ptr != field && nf < 0 ) split_field0() ;
  939. X              /* fall thru */
  940. X  
  941. --- 156,185 ----
  942. X  
  943. X          case  F_PUSHA :
  944. !         cp = (CELL*)cdp->ptr ;
  945. !         if ( cp != field )
  946. !         {
  947. !         if ( nf < 0 )  split_field0() ;
  948. !         if ( ! ( 
  949. ! #if    LM_DOS
  950. !              SAMESEG(cp,field)   &&
  951. ! #endif
  952. !               cp >= NF && cp <= LAST_PFIELD ) )
  953. !         {
  954. !           /* its a real field $1, $2 ... 
  955. !              If its greater than $NF, we have to
  956. !              make sure its set to ""  so that
  957. !              (++|--) and g?sub() work right
  958. !           */
  959. !           t = field_addr_to_index(cp) ;
  960. !           if ( t > nf )
  961. !           {
  962. !             cell_destroy(cp) ;
  963. !             cp->type = C_STRING ;
  964. !             cp->ptr = (PTR) &null_str ;
  965. !             null_str.ref_cnt++ ;
  966. !           }
  967. !         }
  968. !         }
  969. X              /* fall thru */
  970. X  
  971. ***************
  972. *** 197,200 ****
  973. --- 240,252 ----
  974. X              if ( t && nf < 0 )  split_field0() ;
  975. X              sp->ptr = (PTR) field_ptr(t) ;
  976. +         if ( t > nf )
  977. +         {
  978. +           /* make sure its set to "" */
  979. +           cp = sp->ptr ;
  980. +           cell_destroy(cp) ;
  981. +           cp->type = C_STRING ;
  982. +           cp->ptr = (PTR) &null_str ;
  983. +           null_str.ref_cnt++ ;
  984. +         }
  985. X              break ;
  986. X  
  987. ***************
  988. *** 671,676 ****
  989. X  
  990. X          case _POST_INC :
  991. !             (void) cellcpy(sp, cp = (CELL *)sp->ptr) ;
  992. X              if ( cp->type != C_DOUBLE ) cast1_to_d(cp) ;
  993. X              cp->dval += 1.0 ;
  994. X              break ;
  995. --- 723,730 ----
  996. X  
  997. X          case _POST_INC :
  998. !         cp = (CELL *)sp->ptr ;
  999. X              if ( cp->type != C_DOUBLE ) cast1_to_d(cp) ;
  1000. +         sp->type = C_DOUBLE ;
  1001. +         sp->dval = cp->dval ;
  1002. X              cp->dval += 1.0 ;
  1003. X              break ;
  1004. ***************
  1005. *** 677,682 ****
  1006. X  
  1007. X          case _POST_DEC :
  1008. !             (void) cellcpy(sp, cp = (CELL *)sp->ptr) ;
  1009. X              if ( cp->type != C_DOUBLE ) cast1_to_d(cp) ;
  1010. X              cp->dval -= 1.0 ;
  1011. X              break ;
  1012. --- 731,738 ----
  1013. X  
  1014. X          case _POST_DEC :
  1015. !         cp = (CELL *)sp->ptr ;
  1016. X              if ( cp->type != C_DOUBLE ) cast1_to_d(cp) ;
  1017. +         sp->type = C_DOUBLE ;
  1018. +         sp->dval = cp->dval ;
  1019. X              cp->dval -= 1.0 ;
  1020. X              break ;
  1021. ***************
  1022. *** 699,705 ****
  1023. X          case F_POST_INC  :
  1024. X              cp = (CELL *) sp->ptr ;
  1025. !             (void) cellcpy(sp, cellcpy(&tc, cp) ) ;
  1026. !             cast1_to_d(&tc) ;
  1027. !             tc.dval += 1.0 ;
  1028. X              field_assign(cp, &tc) ;
  1029. X              break ;
  1030. --- 755,763 ----
  1031. X          case F_POST_INC  :
  1032. X              cp = (CELL *) sp->ptr ;
  1033. !         (void) cellcpy(&tc, cp) ;
  1034. !         cast1_to_d(&tc) ;
  1035. !         sp->type = C_DOUBLE ;
  1036. !         sp->dval = tc.dval ;
  1037. !         tc.dval += 1.0 ;
  1038. X              field_assign(cp, &tc) ;
  1039. X              break ;
  1040. ***************
  1041. *** 707,713 ****
  1042. X          case F_POST_DEC  :
  1043. X              cp = (CELL *) sp->ptr ;
  1044. !             (void) cellcpy(sp, cellcpy(&tc, cp) ) ;
  1045. !             cast1_to_d(&tc) ;
  1046. !             tc.dval -= 1.0 ;
  1047. X              field_assign(cp, &tc) ;
  1048. X              break ;
  1049. --- 765,773 ----
  1050. X          case F_POST_DEC  :
  1051. X              cp = (CELL *) sp->ptr ;
  1052. !         (void) cellcpy(&tc, cp) ;
  1053. !         cast1_to_d(&tc) ;
  1054. !         sp->type = C_DOUBLE ;
  1055. !         sp->dval = tc.dval ;
  1056. !         tc.dval -= 1.0 ;
  1057. X              field_assign(cp, &tc) ;
  1058. X              break ;
  1059. ***************
  1060. *** 715,721 ****
  1061. X          case F_PRE_INC :
  1062. X              cp = (CELL *) sp->ptr ;
  1063. !             cast1_to_d(cellcpy(&tc, cp)) ;
  1064. !             sp->dval = tc.dval += 1.0 ;
  1065. !             sp->type = C_DOUBLE ;
  1066. X              field_assign(cp, sp) ;
  1067. X              break ;
  1068. --- 775,780 ----
  1069. X          case F_PRE_INC :
  1070. X              cp = (CELL *) sp->ptr ;
  1071. !             cast1_to_d(cellcpy(sp, cp)) ;
  1072. !             sp->dval += 1.0 ;
  1073. X              field_assign(cp, sp) ;
  1074. X              break ;
  1075. ***************
  1076. *** 723,729 ****
  1077. X          case F_PRE_DEC :
  1078. X              cp = (CELL *) sp->ptr ;
  1079. !             cast1_to_d(cellcpy(&tc, cp)) ;
  1080. !             sp->dval = tc.dval -= 1.0 ;
  1081. !             sp->type = C_DOUBLE ;
  1082. X              field_assign(cp, sp) ;
  1083. X              break ;
  1084. --- 782,787 ----
  1085. X          case F_PRE_DEC :
  1086. X              cp = (CELL *) sp->ptr ;
  1087. !             cast1_to_d(cellcpy(sp, cp)) ;
  1088. !             sp->dval -= 1.0 ;
  1089. X              field_assign(cp, sp) ;
  1090. X              break ;
  1091. ***************
  1092. *** 1062,1066 ****
  1093. X    register CELL *cp ;
  1094. X  { int k ;
  1095. -   CELL *dp, *sp ;
  1096. X  
  1097. X  reswitch :
  1098. --- 1120,1123 ----
  1099. ***************
  1100. *** 1075,1078 ****
  1101. --- 1132,1137 ----
  1102. X      
  1103. X      case TWO_STRINGS :
  1104. +     case STRING_AND_STRNUM :
  1105. +     two_s:
  1106. X              k = strcmp(string(cp)->str, string(cp+1)->str) ;
  1107. X              free_STRING( string(cp) ) ;
  1108. ***************
  1109. *** 1080,1094 ****
  1110. X              return k ;
  1111. X  
  1112. -     case STRING_AND_STRNUM :  /* posix numeric string bozosity */
  1113. -     case  NOINIT_AND_STRING  :
  1114. -     case  DOUBLE_AND_STRING  :
  1115. -             if ( cp->type  == C_STRING ) { sp = cp ; dp = cp+1 ; }
  1116. -             else { dp = cp ; sp = cp+1 ; }
  1117. -             check_strnum(sp) ;
  1118. -             if ( sp->type == C_STRING ) cast1_to_s(dp) ;
  1119. -             goto reswitch ;
  1120. X      case  NOINIT_AND_DOUBLE  :
  1121. X      case  NOINIT_AND_STRNUM  :
  1122. --- 1139,1142 ----
  1123. ***************
  1124. *** 1097,1100 ****
  1125. --- 1145,1151 ----
  1126. X              cast2_to_d(cp) ; goto two_d ;
  1127. X  
  1128. +     case  NOINIT_AND_STRING  :
  1129. +     case  DOUBLE_AND_STRING  :
  1130. +             cast2_to_s(cp) ; goto two_s ;
  1131. X  
  1132. X      case  TWO_MBSTRNS :
  1133. *** mawk/fcall.c    Tue Mar  3 17:23:16 1992
  1134. --- mawk112/fcall.c    Tue Apr  7 12:56:14 1992
  1135. ***************
  1136. *** 12,19 ****
  1137. X  
  1138. X  
  1139. ! /*$Log:    fcall.c,v $
  1140. !  * Revision 5.1  91/12/05  07:55:54  brennan
  1141. X   * 1.1 pre-release
  1142. !  * 
  1143. X  */
  1144. X  
  1145. --- 12,19 ----
  1146. X  
  1147. X  
  1148. ! /*$Log: fcall.c,v $
  1149. !  * Revision 5.1  1991/12/05  07:55:54  brennan
  1150. X   * 1.1 pre-release
  1151. !  *
  1152. X  */
  1153. X  
  1154. *** mawk/field.c    Tue Mar  3 17:23:18 1992
  1155. --- mawk112/field.c    Mon Aug 17 07:17:22 1992
  1156. ***************
  1157. *** 11,18 ****
  1158. X  ********************************************/
  1159. X  
  1160. ! /* $Log:    field.c,v $
  1161. !  * Revision 5.1  91/12/05  07:55:57  brennan
  1162. X   * 1.1 pre-release
  1163. !  * 
  1164. X  */
  1165. X  
  1166. --- 11,24 ----
  1167. X  ********************************************/
  1168. X  
  1169. ! /* $Log: field.c,v $
  1170. !  * Revision 5.3  1992/08/17  14:21:10  brennan
  1171. !  * patch2: After parsing, only bi_sprintf() uses string_buff.
  1172. !  *
  1173. !  * Revision 5.2  1992/07/10  16:17:10  brennan
  1174. !  * MsDOS: remove NO_BINMODE macro
  1175. !  *
  1176. !  * Revision 5.1  1991/12/05  07:55:57  brennan
  1177. X   * 1.1 pre-release
  1178. !  *
  1179. X  */
  1180. X  
  1181. ***************
  1182. *** 313,321 ****
  1183. X           it could still damage us. Test it .
  1184. X        */
  1185. !           string_buff[256] = 0 ;
  1186. !           (void) sprintf(string_buff, 
  1187. !              string(fp)->str, 3.1459) ;
  1188. !           if ( string_buff[256] )
  1189. !                 rt_error("CONVFMT assigned unusable value") ;
  1190. X          }
  1191. X          break ;
  1192. --- 319,328 ----
  1193. X           it could still damage us. Test it .
  1194. X        */
  1195. !           char xbuff[512] ;
  1196. !       xbuff[256] = 0 ;
  1197. !           (void) sprintf( xbuff, string(fp)->str, 3.1459) ;
  1198. !           if ( xbuff[256] ) 
  1199. !           rt_error("CONVFMT assigned unusable value") ;
  1200. X          }
  1201. X          break ;
  1202. ***************
  1203. *** 406,417 ****
  1204. X      else /* its a double */
  1205. X      { int ival ;
  1206. X  
  1207. X        if ( (double)(ival = (int)cp->dval) == cp->dval )
  1208. !         (void) sprintf(string_buff, "%d", ival) ;
  1209. X        else
  1210. !         (void) sprintf(string_buff,
  1211. !                string(CONVFMT)->str, cp->dval) ;
  1212. X  
  1213. !       cp->ptr = (PTR) new_STRING(string_buff) ;
  1214. X          }
  1215. X        }
  1216. --- 413,424 ----
  1217. X      else /* its a double */
  1218. X      { int ival ;
  1219. +       char xbuff[260] ;
  1220. X  
  1221. X        if ( (double)(ival = (int)cp->dval) == cp->dval )
  1222. !         (void) sprintf(xbuff, "%d", ival) ;
  1223. X        else
  1224. !         (void) sprintf(xbuff, string(CONVFMT)->str, cp->dval) ;
  1225. X  
  1226. !       cp->ptr = (PTR) new_STRING(xbuff) ;
  1227. X          }
  1228. X        }
  1229. ***************
  1230. *** 570,574 ****
  1231. X  
  1232. X  
  1233. ! #if  MSDOS && NO_BINMODE==0
  1234. X  
  1235. X  int binmode()  /* read current value of BINMODE */
  1236. --- 577,581 ----
  1237. X  
  1238. X  
  1239. ! #if  MSDOS 
  1240. X  
  1241. X  int binmode()  /* read current value of BINMODE */
  1242. *** mawk/field.h    Tue Mar  3 17:23:18 1992
  1243. --- mawk112/field.h    Tue Apr  7 12:56:16 1992
  1244. ***************
  1245. *** 11,18 ****
  1246. X  ********************************************/
  1247. X  
  1248. ! /* $Log:    field.h,v $
  1249. !  * Revision 5.2  92/01/06  08:10:24  brennan
  1250. X   * set_binmode() proto for MSDOS
  1251. !  * 
  1252. X   * Revision 5.1  91/12/05  07:59:16  brennan
  1253. X   * 1.1 pre-release
  1254. --- 11,18 ----
  1255. X  ********************************************/
  1256. X  
  1257. ! /* $Log: field.h,v $
  1258. !  * Revision 5.2  1992/01/06  08:10:24  brennan
  1259. X   * set_binmode() proto for MSDOS
  1260. !  *
  1261. X   * Revision 5.1  91/12/05  07:59:16  brennan
  1262. X   * 1.1 pre-release
  1263. *** mawk/files.c    Tue Mar  3 17:23:20 1992
  1264. --- mawk112/files.c    Fri Jul 10 09:07:45 1992
  1265. ***************
  1266. *** 2,6 ****
  1267. X  /********************************************
  1268. X  files.c
  1269. ! copyright 1991, Michael D. Brennan
  1270. X  
  1271. X  This is a source file for mawk, an implementation of
  1272. --- 2,6 ----
  1273. X  /********************************************
  1274. X  files.c
  1275. ! copyright 1991, 1992.  Michael D. Brennan
  1276. X  
  1277. X  This is a source file for mawk, an implementation of
  1278. ***************
  1279. *** 11,15 ****
  1280. X  ********************************************/
  1281. X  
  1282. ! /*$Log:    files.c,v $
  1283. X   * Revision 5.1  91/12/05  07:56:00  brennan
  1284. X   * 1.1 pre-release
  1285. --- 11,29 ----
  1286. X  ********************************************/
  1287. X  
  1288. ! /*$Log: files.c,v $
  1289. !  * Revision 5.4  1992/07/10  16:10:30  brennan
  1290. !  * patch2
  1291. !  * MsDOS: remove useless NO_BINMODE macro
  1292. !  * get process exit code on in pipes
  1293. !  *
  1294. !  * Revision 5.3  1992/04/07  20:21:17  brennan
  1295. !  * patch 2
  1296. !  * unbuffered output to a tty
  1297. !  *
  1298. !  * Revision 5.2  1992/04/07  16:03:08  brennan
  1299. !  * patch 2
  1300. !  * allow same filename for output and input, but use different descriptors
  1301. !  * E.g. < "/dev/tty" and > "/dev/tty"
  1302. !  *
  1303. X   * Revision 5.1  91/12/05  07:56:00  brennan
  1304. X   * 1.1 pre-release
  1305. ***************
  1306. *** 24,27 ****
  1307. --- 38,45 ----
  1308. X  #include "fin.h"
  1309. X  
  1310. + static FILE  *PROTO(tfopen, (char*,char*)) ;
  1311. + static  void  PROTO(add_to_child_list, (int,int)) ;
  1312. + static struct child *PROTO(remove_from_child_list, (int)) ;
  1313. + extern int PROTO(isatty, (int)) ;
  1314. X  
  1315. X  #ifdef  V7
  1316. ***************
  1317. *** 47,52 ****
  1318. X  STRING  *name ;
  1319. X  short type ;
  1320. ! int pid ;  /* we need to wait() when we close an out pipe */
  1321. X             /* holds temp file index under MSDOS */
  1322. X  PTR   ptr ;  /* FIN*   or  FILE*   */
  1323. X  }  FILE_NODE ;
  1324. --- 65,75 ----
  1325. X  STRING  *name ;
  1326. X  short type ;
  1327. ! int pid ;  /* we need to wait() when we close a pipe */
  1328. X             /* holds temp file index under MSDOS */
  1329. + #if  HAVE_FAKE_PIPES
  1330. + int inpipe_exit ; 
  1331. + #endif
  1332. X  PTR   ptr ;  /* FIN*   or  FILE*   */
  1333. X  }  FILE_NODE ;
  1334. ***************
  1335. *** 63,66 ****
  1336. --- 86,100 ----
  1337. X  }
  1338. X  
  1339. + /* fopen() but no buffering to ttys */
  1340. + static FILE *tfopen(name, mode)
  1341. +   char *name, *mode ;
  1342. + {
  1343. +   FILE *retval = fopen(name,mode) ;
  1344. +   if ( retval && isatty(fileno(retval)) )  setbuf(retval, (char*)0) ;
  1345. +   return retval ;
  1346. + }
  1347. + /* find a file on file_list */
  1348. X  PTR  file_find( sval, type )
  1349. X    STRING *sval ;
  1350. ***************
  1351. *** 75,83 ****
  1352. X      if ( !p )   /* open a new one */
  1353. X      {
  1354. !       p = (FILE_NODE*) zmalloc(sizeof(FILE_NODE)) ;
  1355. X        switch( p->type = type )
  1356. X        {
  1357. X          case  F_TRUNC :
  1358. ! #if MSDOS && NO_BINMODE==0
  1359. X              ostr = (binmode()&2) ? "wb" : "w" ;
  1360. X  #else
  1361. --- 109,117 ----
  1362. X      if ( !p )   /* open a new one */
  1363. X      {
  1364. !       p = ZMALLOC(FILE_NODE) ; 
  1365. X        switch( p->type = type )
  1366. X        {
  1367. X          case  F_TRUNC :
  1368. ! #if MSDOS 
  1369. X              ostr = (binmode()&2) ? "wb" : "w" ;
  1370. X  #else
  1371. ***************
  1372. *** 84,88 ****
  1373. X              ostr = "w" ;
  1374. X  #endif
  1375. !             if ( !(p->ptr = (PTR) fopen(name, ostr)) )
  1376. X                  goto out_failure ;
  1377. X              break ;
  1378. --- 118,122 ----
  1379. X              ostr = "w" ;
  1380. X  #endif
  1381. !             if ( !(p->ptr = (PTR) tfopen(name, ostr)) )
  1382. X                  goto out_failure ;
  1383. X              break ;
  1384. ***************
  1385. *** 89,93 ****
  1386. X  
  1387. X          case  F_APPEND :
  1388. ! #if MSDOS && NO_BINMODE==0
  1389. X              ostr = (binmode()&2) ? "ab" : "a" ;
  1390. X  #else
  1391. --- 123,127 ----
  1392. X  
  1393. X          case  F_APPEND :
  1394. ! #if MSDOS 
  1395. X              ostr = (binmode()&2) ? "ab" : "a" ;
  1396. X  #else
  1397. ***************
  1398. *** 94,98 ****
  1399. X              ostr = "a" ;
  1400. X  #endif
  1401. !             if ( !(p->ptr = (PTR) fopen(name, ostr)) )
  1402. X                  goto out_failure ;
  1403. X              break ;
  1404. --- 128,132 ----
  1405. X              ostr = "a" ;
  1406. X  #endif
  1407. !             if ( !(p->ptr = (PTR) tfopen(name, ostr)) )
  1408. X                  goto out_failure ;
  1409. X              break ;
  1410. ***************
  1411. *** 130,137 ****
  1412. X      }
  1413. X  
  1414. !     if ( strcmp(name, p->name->str) == 0 )
  1415. !     { /* no distinction between F_APPEND and F_TRUNC here */
  1416. !       if ( p->type != type && 
  1417. !            (p->type < F_APPEND || type < F_APPEND))  goto type_failure ;
  1418. X        if ( !q )  /*at front of list */
  1419. X            return  p->ptr ;
  1420. --- 164,174 ----
  1421. X      }
  1422. X  
  1423. !     /* search is by name and type */
  1424. !     if ( strcmp(name, p->name->str) == 0 &&
  1425. !      ( p->type == type ||
  1426. !            /* no distinction between F_APPEND and F_TRUNC here */
  1427. !        p->type >= F_APPEND && type >= F_APPEND ))
  1428. !     { /* found */
  1429. X        if ( !q )  /*at front of list */
  1430. X            return  p->ptr ;
  1431. ***************
  1432. *** 138,145 ****
  1433. X        /* delete from list for move to front */
  1434. X        q->link = p->link ;
  1435. !       break ;
  1436. X      }
  1437. X      q = p ; p = p->link ;
  1438. !   }
  1439. X  
  1440. X    /* put p at the front of the list */
  1441. --- 175,182 ----
  1442. X        /* delete from list for move to front */
  1443. X        q->link = p->link ;
  1444. !       break ; /* while loop */
  1445. X      }
  1446. X      q = p ; p = p->link ;
  1447. !   } /* end while loop */
  1448. X  
  1449. X    /* put p at the front of the list */
  1450. ***************
  1451. *** 151,161 ****
  1452. X    mawk_exit(1) ;
  1453. X  
  1454. - type_failure :
  1455. -   rt_error("use of file \"%s\"\n\tis inconsistent with previous use",
  1456. -            name) ;
  1457. X  }
  1458. X  
  1459. X  
  1460. ! /* close a file and delete it's node from the file_list */
  1461. X  
  1462. X  int  file_close( sval )
  1463. --- 188,198 ----
  1464. X    mawk_exit(1) ;
  1465. X  
  1466. X  }
  1467. X  
  1468. X  
  1469. ! /* Close a file and delete it's node from the file_list.
  1470. !    Walk the whole list, in case a name has two nodes,
  1471. !    e.g. < "/dev/tty" and > "/dev/tty"
  1472. ! */
  1473. X  
  1474. X  int  file_close( sval )
  1475. ***************
  1476. *** 163,168 ****
  1477. X  { register FILE_NODE *p = file_list ;
  1478. X    FILE_NODE *q = (FILE_NODE *) 0 ; /* trails p */
  1479. X    char *name = sval->str ;
  1480. !   int retval = 0 ;
  1481. X  
  1482. X    while ( p )
  1483. --- 200,206 ----
  1484. X  { register FILE_NODE *p = file_list ;
  1485. X    FILE_NODE *q = (FILE_NODE *) 0 ; /* trails p */
  1486. +   FILE_NODE *hold ;
  1487. X    char *name = sval->str ;
  1488. !   int retval = -1 ;
  1489. X  
  1490. X    while ( p )
  1491. ***************
  1492. *** 174,177 ****
  1493. --- 212,216 ----
  1494. X              case  F_APPEND :    
  1495. X                  (void) fclose((FILE *) p->ptr) ;
  1496. +         retval = 0 ;
  1497. X                  break ;
  1498. X  
  1499. ***************
  1500. *** 189,192 ****
  1501. --- 228,232 ----
  1502. X              case F_IN  :
  1503. X                  FINclose((FIN *) p->ptr) ;
  1504. +         retval = 0 ;
  1505. X                  break ;
  1506. X  
  1507. ***************
  1508. *** 199,202 ****
  1509. --- 239,243 ----
  1510. X  #if  HAVE_FAKE_PIPES
  1511. X                  (void) unlink(tmp_file_name(p->pid)) ;
  1512. +         retval = p->inpipe_exit ;
  1513. X  #endif
  1514. X                  break ;
  1515. ***************
  1516. *** 204,217 ****
  1517. X  
  1518. X            free_STRING(p->name) ;
  1519. !           if ( q )  q->link = p->link ;
  1520. !           else  file_list = p->link ;
  1521. X  
  1522. !           zfree(p, sizeof(FILE_NODE)) ;
  1523. !           return retval ;
  1524. X          }
  1525. X          else { q = p ; p = p->link ; }
  1526. X  
  1527. !   /* its not on the list */
  1528. !   return -1 ;
  1529. X  }
  1530. X  
  1531. --- 245,257 ----
  1532. X  
  1533. X            free_STRING(p->name) ;
  1534. !       hold = p ;
  1535. !           if ( q )  q->link = p = p->link ;
  1536. !           else  file_list = p = p->link ;
  1537. X  
  1538. !           ZFREE(hold) ;
  1539. X          }
  1540. X          else { q = p ; p = p->link ; }
  1541. X  
  1542. !   return retval ;
  1543. X  }
  1544. X  
  1545. *** mawk/files.h    Tue Mar  3 17:23:20 1992
  1546. --- mawk112/files.h    Tue Apr  7 12:56:17 1992
  1547. ***************
  1548. *** 11,18 ****
  1549. X  ********************************************/
  1550. X  
  1551. ! /*$Log:    files.h,v $
  1552. !  * Revision 5.1  91/12/05  07:59:18  brennan
  1553. X   * 1.1 pre-release
  1554. !  * 
  1555. X  */
  1556. X  
  1557. --- 11,18 ----
  1558. X  ********************************************/
  1559. X  
  1560. ! /*$Log: files.h,v $
  1561. !  * Revision 5.1  1991/12/05  07:59:18  brennan
  1562. X   * 1.1 pre-release
  1563. !  *
  1564. X  */
  1565. X  
  1566. *** mawk/fin.c    Tue Mar  3 17:29:06 1992
  1567. --- mawk112/fin.c    Tue Aug 11 07:40:14 1992
  1568. ***************
  1569. *** 2,6 ****
  1570. X  /********************************************
  1571. X  fin.c
  1572. ! copyright 1991, Michael D. Brennan
  1573. X  
  1574. X  This is a source file for mawk, an implementation of
  1575. --- 2,6 ----
  1576. X  /********************************************
  1577. X  fin.c
  1578. ! copyright 1991, 1992.  Michael D. Brennan
  1579. X  
  1580. X  This is a source file for mawk, an implementation of
  1581. ***************
  1582. *** 11,19 ****
  1583. X  ********************************************/
  1584. X  
  1585. ! /*$Log:    fin.c,v $
  1586. !  * Revision 5.2  92/02/21  13:30:08  brennan
  1587. !  * fixed bug that free'd FILENAME twice if 
  1588. X   * command line was var=value only
  1589. !  * 
  1590. X   * Revision 5.1  91/12/05  07:56:02  brennan
  1591. X   * 1.1 pre-release
  1592. --- 11,29 ----
  1593. X  ********************************************/
  1594. X  
  1595. ! /*$Log: fin.c,v $
  1596. !  * Revision 5.5  1992/07/28  15:11:30  brennan
  1597. !  * minor change in finding eol, needed for MsDOS
  1598. !  *
  1599. !  * Revision 5.4  1992/07/10  16:17:10  brennan
  1600. !  * MsDOS: remove NO_BINMODE macro
  1601. !  *
  1602. !  * Revision 5.3  1992/07/08  16:14:27  brennan
  1603. !  * FILENAME and FNR retain last values in the
  1604. !  * END block.
  1605. !  *
  1606. !  * Revision 5.2  1992/02/21  13:30:08  brennan
  1607. !  * fixed bug that free'd FILENAME twice if
  1608. X   * command line was var=value only
  1609. !  *
  1610. X   * Revision 5.1  91/12/05  07:56:02  brennan
  1611. X   * 1.1 pre-release
  1612. ***************
  1613. *** 35,39 ****
  1614. X  #endif
  1615. X  
  1616. ! /* This file handles input buffering */
  1617. X  
  1618. X  #ifndef MSDOS_MSC
  1619. --- 45,52 ----
  1620. X  #endif
  1621. X  
  1622. ! /* This file handles input files.  Opening, closing,
  1623. !    buffering and (most important) splitting files into
  1624. !    records, FINgets().
  1625. ! */
  1626. X  
  1627. X  #ifndef MSDOS_MSC
  1628. ***************
  1629. *** 77,81 ****
  1630. X    int oflag = O_RDONLY ;
  1631. X  
  1632. ! #if  MSDOS && NO_BINMODE==0
  1633. X    int bm = binmode() & 1 ;
  1634. X    if ( bm ) oflag |= O_BINARY ;
  1635. --- 90,94 ----
  1636. X    int oflag = O_RDONLY ;
  1637. X  
  1638. ! #if  MSDOS 
  1639. X    int bm = binmode() & 1 ;
  1640. X    if ( bm ) oflag |= O_BINARY ;
  1641. ***************
  1642. *** 84,88 ****
  1643. X    if ( filename[0] == '-' && filename[1] == 0 )
  1644. X    {
  1645. ! #if  MSDOS  &&  NO_BINMODE==0
  1646. X       if ( bm )  setmode(0, O_BINARY) ;
  1647. X  #endif
  1648. --- 97,101 ----
  1649. X    if ( filename[0] == '-' && filename[1] == 0 )
  1650. X    {
  1651. ! #if  MSDOS  
  1652. X       if ( bm )  setmode(0, O_BINARY) ;
  1653. X  #endif
  1654. ***************
  1655. *** 160,165 ****
  1656. X        else  /* return this line */
  1657. X        {
  1658. !         if ( !(p = strchr(fin->buff, '\n')) )
  1659. !              p = fin->buff + BUFFSZ + 1 ; /* unlikely to occur */
  1660. X  
  1661. X          *p = 0 ; *len_p = p - fin->buff ;
  1662. --- 173,179 ----
  1663. X        else  /* return this line */
  1664. X        {
  1665. !     /* find eol */
  1666. !     p = fin->buff ;
  1667. !     while ( *p != '\n' && *p != 0 )  p++ ;
  1668. X  
  1669. X          *p = 0 ; *len_p = p - fin->buff ;
  1670. ***************
  1671. *** 340,343 ****
  1672. --- 354,360 ----
  1673. X      FILENAME->type = C_STRING ;
  1674. X      FILENAME->ptr = (PTR) new_STRING( "-") ;
  1675. +     cell_destroy(FNR) ;
  1676. +     FNR->type = C_DOUBLE ;
  1677. +     FNR->dval = 0.0 ;
  1678. X      main_fin = FINdopen(0, 1) ;
  1679. X  }
  1680. ***************
  1681. *** 344,351 ****
  1682. X     
  1683. X  
  1684. X  void  open_main()  
  1685. X  { CELL argc ;
  1686. X  
  1687. ! #if  MSDOS && NO_BINMODE==0   /* set input modes */
  1688. X    int k = binmode() ;
  1689. X  
  1690. --- 361,372 ----
  1691. X     
  1692. X  
  1693. + /* this gets called once to get the input stream going.
  1694. +    It is called after the execution of the BEGIN block
  1695. +    unless there is a getline inside BEGIN {}
  1696. + */
  1697. X  void  open_main()  
  1698. X  { CELL argc ;
  1699. X  
  1700. ! #if  MSDOS 
  1701. X    int k = binmode() ;
  1702. X  
  1703. ***************
  1704. *** 361,364 ****
  1705. --- 382,386 ----
  1706. X  }
  1707. X  
  1708. + /* get the next command line file open */
  1709. X  static  FIN  *next_main(open_flag)
  1710. X    int open_flag ; /* called by open_main() if on */
  1711. ***************
  1712. *** 374,384 ****
  1713. X  
  1714. X    if ( main_fin )  FINclose(main_fin) ;
  1715. !   cell_destroy( FILENAME ) ;
  1716. !   FILENAME->type = C_NOINIT ; 
  1717. !      /* so don't free again if we go to set_main_to_stdin() */
  1718. !   cell_destroy( FNR ) ;
  1719. !   FNR->type = C_DOUBLE ;
  1720. !   FNR->dval = 0.0 ;
  1721. X  
  1722. X    if ( cellcpy(&argc, ARGC)->type != C_DOUBLE )
  1723. X            cast1_to_d(&argc) ;
  1724. --- 396,403 ----
  1725. X  
  1726. X    if ( main_fin )  FINclose(main_fin) ;
  1727. !   /* FILENAME and FNR don't change unless we really open
  1728. !      a new file */
  1729. X  
  1730. +   /* make a copy of ARGC to avoid side effect */
  1731. X    if ( cellcpy(&argc, ARGC)->type != C_DOUBLE )
  1732. X            cast1_to_d(&argc) ;
  1733. ***************
  1734. *** 397,400 ****
  1735. --- 416,420 ----
  1736. X      if ( cp->type < C_STRING )  cast1_to_s(cp) ;
  1737. X      if ( string(cp)->len == 0 )  continue ;
  1738. +           /* file argument is "" */
  1739. X  
  1740. X      /* it might be a command line assignment */
  1741. ***************
  1742. *** 405,411 ****
  1743. X      if ( ! (main_fin = FINopen( string(cp)->str, 1 )) ) mawk_exit(1) ;
  1744. X  
  1745. !     /* success */
  1746. X      (void) cellcpy(FILENAME , cp ) ;
  1747. X      free_STRING( string(cp) ) ;
  1748. X      return  main_fin ;
  1749. X    }
  1750. --- 425,436 ----
  1751. X      if ( ! (main_fin = FINopen( string(cp)->str, 1 )) ) mawk_exit(1) ;
  1752. X  
  1753. !     /* success -- set FILENAME and FNR */
  1754. !     cell_destroy(FILENAME) ;
  1755. X      (void) cellcpy(FILENAME , cp ) ;
  1756. X      free_STRING( string(cp) ) ;
  1757. +     cell_destroy(FNR) ;
  1758. +     FNR->type = C_DOUBLE ;
  1759. +     FNR->dval = 0.0 ;
  1760. X      return  main_fin ;
  1761. X    }
  1762. ***************
  1763. *** 417,423 ****
  1764. X      
  1765. X    /* real failure */
  1766. -   FILENAME->type = C_STRING ;
  1767. -   FILENAME->ptr = (PTR) new_STRING( "" ) ;
  1768. X    { /* this is how we mark EOF on main_fin  */
  1769. X      static char dead_buff = 0 ;
  1770. --- 442,445 ----
  1771. *** mawk/fin.h    Tue Mar  3 17:23:22 1992
  1772. --- mawk112/fin.h    Tue Apr  7 12:56:19 1992
  1773. ***************
  1774. *** 11,18 ****
  1775. X  ********************************************/
  1776. X  
  1777. ! /*$Log:    fin.h,v $
  1778. !  * Revision 5.2  92/01/06  08:16:24  brennan
  1779. X   * setmode() proto for MSDOS
  1780. !  * 
  1781. X   * Revision 5.1  91/12/05  07:59:20  brennan
  1782. X   * 1.1 pre-release
  1783. --- 11,18 ----
  1784. X  ********************************************/
  1785. X  
  1786. ! /*$Log: fin.h,v $
  1787. !  * Revision 5.2  1992/01/06  08:16:24  brennan
  1788. X   * setmode() proto for MSDOS
  1789. !  *
  1790. X   * Revision 5.1  91/12/05  07:59:20  brennan
  1791. X   * 1.1 pre-release
  1792. *** mawk/hash.c    Tue Mar  3 17:23:24 1992
  1793. --- mawk112/hash.c    Tue Apr  7 12:56:20 1992
  1794. ***************
  1795. *** 12,19 ****
  1796. X  
  1797. X  
  1798. ! /* $Log:    hash.c,v $
  1799. !  * Revision 5.1  91/12/05  07:56:05  brennan
  1800. X   * 1.1 pre-release
  1801. !  * 
  1802. X  */
  1803. X  
  1804. --- 12,19 ----
  1805. X  
  1806. X  
  1807. ! /* $Log: hash.c,v $
  1808. !  * Revision 5.1  1991/12/05  07:56:05  brennan
  1809. X   * 1.1 pre-release
  1810. !  *
  1811. X  */
  1812. X  
  1813. *** mawk/init.c    Tue Mar  3 17:23:24 1992
  1814. --- mawk112/init.c    Fri Jul 10 09:17:41 1992
  1815. ***************
  1816. *** 12,19 ****
  1817. X  
  1818. X  
  1819. ! /* $Log:    init.c,v $
  1820. !  * Revision 5.2  92/01/09  08:46:14  brennan
  1821. X   * small change for MSC
  1822. !  * 
  1823. X   * Revision 5.1  91/12/05  07:56:07  brennan
  1824. X   * 1.1 pre-release
  1825. --- 12,22 ----
  1826. X  
  1827. X  
  1828. ! /* $Log: init.c,v $
  1829. !  * Revision 5.3  1992/07/10  16:17:10  brennan
  1830. !  * MsDOS: remove NO_BINMODE macro
  1831. !  *
  1832. !  * Revision 5.2  1992/01/09  08:46:14  brennan
  1833. X   * small change for MSC
  1834. !  *
  1835. X   * Revision 5.1  91/12/05  07:56:07  brennan
  1836. X   * 1.1 pre-release
  1837. ***************
  1838. *** 65,69 ****
  1839. X  #endif 
  1840. X  
  1841. ! #if   MSDOS  &&  NO_BINMODE==0
  1842. X    { char *p = getenv("MAWKBINMODE") ;
  1843. X  
  1844. --- 68,72 ----
  1845. X  #endif 
  1846. X  
  1847. ! #if   MSDOS  
  1848. X    { char *p = getenv("MAWKBINMODE") ;
  1849. X  
  1850. ***************
  1851. *** 167,171 ****
  1852. X            }
  1853. X          }
  1854. ! #if  MSDOS  &&  NO_BINMODE==0
  1855. X          else
  1856. X          if ( optarg[0] == 'B' )
  1857. --- 170,174 ----
  1858. X            }
  1859. X          }
  1860. ! #if  MSDOS  
  1861. X          else
  1862. X          if ( optarg[0] == 'B' )
  1863. *** mawk/init.h    Tue Mar  3 17:23:26 1992
  1864. --- mawk112/init.h    Tue Apr  7 12:56:21 1992
  1865. ***************
  1866. *** 11,18 ****
  1867. X  ********************************************/
  1868. X  
  1869. ! /* $Log:    init.h,v $
  1870. !  * Revision 5.1  91/12/05  07:59:22  brennan
  1871. X   * 1.1 pre-release
  1872. !  * 
  1873. X  */
  1874. X  
  1875. --- 11,18 ----
  1876. X  ********************************************/
  1877. X  
  1878. ! /* $Log: init.h,v $
  1879. !  * Revision 5.1  1991/12/05  07:59:22  brennan
  1880. X   * 1.1 pre-release
  1881. !  *
  1882. X  */
  1883. X  
  1884. *** mawk/jmp.c    Tue Mar  3 17:23:26 1992
  1885. --- mawk112/jmp.c    Tue Apr  7 12:56:22 1992
  1886. ***************
  1887. *** 11,18 ****
  1888. X  ********************************************/
  1889. X  
  1890. ! /* $Log:    jmp.c,v $
  1891. !  * Revision 5.1  91/12/05  07:56:10  brennan
  1892. X   * 1.1 pre-release
  1893. !  * 
  1894. X  */
  1895. X  
  1896. --- 11,18 ----
  1897. X  ********************************************/
  1898. X  
  1899. ! /* $Log: jmp.c,v $
  1900. !  * Revision 5.1  1991/12/05  07:56:10  brennan
  1901. X   * 1.1 pre-release
  1902. !  *
  1903. X  */
  1904. X  
  1905. *** mawk/jmp.h    Tue Mar  3 17:23:28 1992
  1906. --- mawk112/jmp.h    Tue Apr  7 12:56:23 1992
  1907. ***************
  1908. *** 11,18 ****
  1909. X  ********************************************/
  1910. X  
  1911. ! /* $Log:    jmp.h,v $
  1912. !  * Revision 5.1  91/12/05  07:59:24  brennan
  1913. X   * 1.1 pre-release
  1914. !  * 
  1915. X  */
  1916. X  
  1917. --- 11,18 ----
  1918. X  ********************************************/
  1919. X  
  1920. ! /* $Log: jmp.h,v $
  1921. !  * Revision 5.1  1991/12/05  07:59:24  brennan
  1922. X   * 1.1 pre-release
  1923. !  *
  1924. X  */
  1925. X  
  1926. *** mawk/kw.c    Tue Mar  3 17:23:28 1992
  1927. --- mawk112/kw.c    Tue Apr  7 12:56:24 1992
  1928. ***************
  1929. *** 12,19 ****
  1930. X  
  1931. X  
  1932. ! /* $Log:    kw.c,v $
  1933. !  * Revision 5.1  91/12/05  07:56:12  brennan
  1934. X   * 1.1 pre-release
  1935. !  * 
  1936. X  */
  1937. X  
  1938. --- 12,19 ----
  1939. X  
  1940. X  
  1941. ! /* $Log: kw.c,v $
  1942. !  * Revision 5.1  1991/12/05  07:56:12  brennan
  1943. X   * 1.1 pre-release
  1944. !  *
  1945. X  */
  1946. X  
  1947. *** mawk/main.c    Tue Mar  3 17:23:28 1992
  1948. --- mawk112/main.c    Tue Apr  7 12:56:25 1992
  1949. ***************
  1950. *** 11,18 ****
  1951. X  ********************************************/
  1952. X  
  1953. ! /* $Log:    main.c,v $
  1954. !  * Revision 5.1  91/12/05  07:56:14  brennan
  1955. X   * 1.1 pre-release
  1956. !  * 
  1957. X  */
  1958. X  
  1959. --- 11,18 ----
  1960. X  ********************************************/
  1961. X  
  1962. ! /* $Log: main.c,v $
  1963. !  * Revision 5.1  1991/12/05  07:56:14  brennan
  1964. X   * 1.1 pre-release
  1965. !  *
  1966. X  */
  1967. X  
  1968. *** mawk/makescan.c    Tue Mar  3 17:23:30 1992
  1969. --- mawk112/makescan.c    Tue Apr  7 12:56:25 1992
  1970. ***************
  1971. *** 11,18 ****
  1972. X  ********************************************/
  1973. X  
  1974. ! /*$Log:    makescan.c,v $
  1975. !  * Revision 5.1  91/12/05  07:56:16  brennan
  1976. X   * 1.1 pre-release
  1977. !  * 
  1978. X  */
  1979. X  
  1980. --- 11,18 ----
  1981. X  ********************************************/
  1982. X  
  1983. ! /*$Log: makescan.c,v $
  1984. !  * Revision 5.1  1991/12/05  07:56:16  brennan
  1985. X   * 1.1 pre-release
  1986. !  *
  1987. X  */
  1988. X  
  1989. *** mawk/matherr.c    Tue Mar  3 17:23:30 1992
  1990. --- mawk112/matherr.c    Tue Apr  7 12:56:26 1992
  1991. ***************
  1992. *** 11,15 ****
  1993. X  ********************************************/
  1994. X  
  1995. ! /*$Log:    matherr.c,v $
  1996. X   * Revision 5.1  91/12/05  07:56:18  brennan
  1997. X   * 1.1 pre-release
  1998. --- 11,20 ----
  1999. X  ********************************************/
  2000. X  
  2001. ! /*$Log: matherr.c,v $
  2002. !  * Revision 5.2  1992/03/31  16:14:44  brennan
  2003. !  * patch2:
  2004. !  * TURN_ON_FPE_TRAPS() macro
  2005. !  * USE_IEEEFP_H macro
  2006. !  *
  2007. X   * Revision 5.1  91/12/05  07:56:18  brennan
  2008. X   * 1.1 pre-release
  2009. ***************
  2010. *** 20,23 ****
  2011. --- 25,32 ----
  2012. X  #include  <math.h>
  2013. X  
  2014. + #ifdef  USE_IEEEFP_H
  2015. + #include <ieeefp.h>
  2016. + #endif
  2017. X  #if   FPE_TRAPS_ON
  2018. X  #include <signal.h>
  2019. ***************
  2020. *** 53,57 ****
  2021. X  
  2022. X  void   fpe_init()
  2023. ! { (void) signal(SIGFPE, fpe_catch) ; }
  2024. X  
  2025. X  #else  /* FPE_TRAPS_ON==0 */
  2026. --- 62,69 ----
  2027. X  
  2028. X  void   fpe_init()
  2029. ! { 
  2030. !   TURN_ON_FPE_TRAPS() ;
  2031. !   (void) signal(SIGFPE, fpe_catch) ; 
  2032. ! }
  2033. X  
  2034. X  #else  /* FPE_TRAPS_ON==0 */
  2035. *** mawk/mawk.h    Tue Mar  3 17:29:10 1992
  2036. --- mawk112/mawk.h    Mon Jul  6 13:12:32 1992
  2037. ***************
  2038. *** 2,6 ****
  2039. X  /********************************************
  2040. X  mawk.h
  2041. ! copyright 1991, Michael D. Brennan
  2042. X  
  2043. X  This is a source file for mawk, an implementation of
  2044. --- 2,6 ----
  2045. X  /********************************************
  2046. X  mawk.h
  2047. ! copyright 1991 1992, Michael D. Brennan
  2048. X  
  2049. X  This is a source file for mawk, an implementation of
  2050. ***************
  2051. *** 12,19 ****
  2052. X  
  2053. X  
  2054. ! /*   $Log:    mawk.h,v $
  2055. !  * Revision 5.4  92/03/03  16:34:41  brennan
  2056. X   * conditional around open() proto
  2057. !  * 
  2058. X   * Revision 5.3  92/01/09  08:46:58  brennan
  2059. X   * cell destroy macro
  2060. --- 12,22 ----
  2061. X  
  2062. X  
  2063. ! /*   $Log: mawk.h,v $
  2064. !  * Revision 5.5  1992/07/06  20:15:49  brennan
  2065. !  * DONT_PROTO_OPEN macro
  2066. !  *
  2067. !  * Revision 5.4  1992/03/03  16:34:41  brennan
  2068. X   * conditional around open() proto
  2069. !  *
  2070. X   * Revision 5.3  92/01/09  08:46:58  brennan
  2071. X   * cell destroy macro
  2072. ***************
  2073. *** 157,164 ****
  2074. X  
  2075. X  /* ANSI compilers won't like open() if they've ever seen open as
  2076. !    int open(char *,int, ...).  If so remove it.
  2077. X  */
  2078. X  
  2079. ! #ifndef _IBMR2 /* AIX */
  2080. X  int   PROTO( open, (char *,int, int) ) ;
  2081. X  #endif
  2082. --- 160,168 ----
  2083. X  
  2084. X  /* ANSI compilers won't like open() if they've ever seen open as
  2085. !    int open(char *,int, ...).  If so , 
  2086. !    #define DONT_PROTO_OPEN
  2087. X  */
  2088. X  
  2089. ! #ifndef DONT_PROTO_OPEN
  2090. X  int   PROTO( open, (char *,int, int) ) ;
  2091. X  #endif
  2092. *** mawk/memory.c    Tue Mar  3 17:23:32 1992
  2093. --- mawk112/memory.c    Tue Apr  7 12:56:28 1992
  2094. ***************
  2095. *** 12,19 ****
  2096. X  
  2097. X  
  2098. ! /* $Log:    memory.c,v $
  2099. !  * Revision 5.1  91/12/05  07:56:21  brennan
  2100. X   * 1.1 pre-release
  2101. !  * 
  2102. X  */
  2103. X  
  2104. --- 12,19 ----
  2105. X  
  2106. X  
  2107. ! /* $Log: memory.c,v $
  2108. !  * Revision 5.1  1991/12/05  07:56:21  brennan
  2109. X   * 1.1 pre-release
  2110. !  *
  2111. X  */
  2112. X  
  2113. *** mawk/memory.h    Tue Mar  3 17:23:34 1992
  2114. --- mawk112/memory.h    Tue Apr  7 12:56:29 1992
  2115. ***************
  2116. *** 12,19 ****
  2117. X  
  2118. X  
  2119. ! /* $Log:    memory.h,v $
  2120. !  * Revision 5.1  91/12/05  07:59:28  brennan
  2121. X   * 1.1 pre-release
  2122. !  * 
  2123. X  */
  2124. X  
  2125. --- 12,19 ----
  2126. X  
  2127. X  
  2128. ! /* $Log: memory.h,v $
  2129. !  * Revision 5.1  1991/12/05  07:59:28  brennan
  2130. X   * 1.1 pre-release
  2131. !  *
  2132. X  */
  2133. X  
  2134. *** mawk/modbison.awk    Tue Mar  3 17:23:02 1992
  2135. --- mawk112/modbison.awk    Thu Jun 11 13:30:15 1992
  2136. ***************
  2137. *** 7,11 ****
  2138. X  # the most portable solution is to #if 0  it out
  2139. X  #
  2140. ! # This script only works with bison 1.14
  2141. X  #
  2142. X  
  2143. --- 7,11 ----
  2144. X  # the most portable solution is to #if 0  it out
  2145. X  #
  2146. ! # This script works with bison 1.14 and 1.18
  2147. X  #
  2148. X  
  2149. *** mawk/packing.list    Tue Mar  3 17:28:52 1992
  2150. --- mawk112/packing.list    Wed Aug 26 21:05:58 1992
  2151. ***************
  2152. *** 1,5 ****
  2153. X  
  2154. X  ################################################
  2155. ! # These files form the mawk distribution 1.1.1
  2156. X  #
  2157. X  # Mawk is an implementation of the AWK Programming Language as
  2158. --- 1,5 ----
  2159. X  
  2160. X  ################################################
  2161. ! # These files form the mawk distribution 1.1.2
  2162. X  #
  2163. X  # Mawk is an implementation of the AWK Programming Language as
  2164. ***************
  2165. *** 12,16 ****
  2166. X  README            description of mawk 1.1
  2167. X  NEW            changes from 1.0 to 1.1
  2168. ! PATCHES            changes from 1.1 to 1.1.1
  2169. X  INSTALL            installation instructions
  2170. X  COPYING            GNU General Public License, version 2    
  2171. --- 12,16 ----
  2172. X  README            description of mawk 1.1
  2173. X  NEW            changes from 1.0 to 1.1
  2174. ! PATCHES            changes from 1.1 to 1.1.2
  2175. X  INSTALL            installation instructions
  2176. X  COPYING            GNU General Public License, version 2    
  2177. ***************
  2178. *** 103,106 ****
  2179. --- 103,107 ----
  2180. X  config/sysV_ieeefp.h
  2181. X  config/sysV.h
  2182. + config/sysVr4i386.h
  2183. X  config/msc_dos.h
  2184. X  config/think_c.h
  2185. ***************
  2186. *** 111,114 ****
  2187. --- 112,117 ----
  2188. X  config/sgi.h
  2189. X  config/apollo.h
  2190. + config/convex.h
  2191. + config/aix.h
  2192. X  #######################
  2193. X  # directory:  test      testing and benchmarking directory
  2194. *** mawk/parse.y    Tue Mar  3 17:23:38 1992
  2195. --- mawk112/parse.y    Sat Aug  8 10:13:38 1992
  2196. ***************
  2197. *** 11,18 ****
  2198. X  ********************************************/
  2199. X  
  2200. ! /* $Log:    parse.y,v $
  2201. !  * Revision 5.2  92/01/08  16:11:42  brennan
  2202. X   * code FE_PUSHA carefully for MSDOS large mode
  2203. !  * 
  2204. X   * Revision 5.1  91/12/05  07:50:22  brennan
  2205. X   * 1.1 pre-release
  2206. --- 11,25 ----
  2207. X  ********************************************/
  2208. X  
  2209. ! /* $Log: parse.y,v $
  2210. !  * Revision 5.4  1992/08/08  17:17:20  brennan
  2211. !  * patch 2: improved timing of error recovery in
  2212. !  * bungled function definitions. Fixes a core dump
  2213. !  *
  2214. !  * Revision 5.3  1992/07/08  15:43:41  brennan
  2215. !  * patch2: length returns.  I am a wimp
  2216. !  *
  2217. !  * Revision 5.2  1992/01/08  16:11:42  brennan
  2218. X   * code FE_PUSHA carefully for MSDOS large mode
  2219. !  *
  2220. X   * Revision 5.1  91/12/05  07:50:22  brennan
  2221. X   * 1.1 pre-release
  2222. ***************
  2223. *** 111,115 ****
  2224. X  %token  <stp> ID   D_ID
  2225. X  %token  <fbp> FUNCT_ID
  2226. ! %token  <bip> BUILTIN 
  2227. X  %token   <cp>  FIELD 
  2228. X  
  2229. --- 118,122 ----
  2230. X  %token  <stp> ID   D_ID
  2231. X  %token  <fbp> FUNCT_ID
  2232. ! %token  <bip> BUILTIN  LENGTH
  2233. X  %token   <cp>  FIELD 
  2234. X  
  2235. ***************
  2236. *** 147,155 ****
  2237. X  program_block :  PA_block   /* pattern-action */
  2238. X                |  function_def
  2239. !               |  error block
  2240. !                  { if (scope == SCOPE_FUNCT)
  2241. !                    { restore_ids() ; scope = SCOPE_MAIN ; }
  2242. !                    code_ptr = main_code_ptr ;
  2243. !                  }
  2244. X                ;
  2245. X  
  2246. --- 154,158 ----
  2247. X  program_block :  PA_block   /* pattern-action */
  2248. X                |  function_def
  2249. !               |  outside_error block
  2250. X                ;
  2251. X  
  2252. ***************
  2253. *** 417,420 ****
  2254. --- 420,428 ----
  2255. X            code2(_BUILTIN , p->fp) ;
  2256. X          }
  2257. +     | LENGTH   /* this is an irritation */
  2258. +       {
  2259. +         code1(_PUSHINT) ; code1(0) ;
  2260. +         code2(_BUILTIN, $1->fp) ;
  2261. +       }
  2262. X          ;
  2263. X  
  2264. ***************
  2265. *** 975,978 ****
  2266. --- 983,1003 ----
  2267. X                }
  2268. X             ;
  2269. + outside_error :  error
  2270. +                  {  /* we may have to recover from a bungled function
  2271. +                definition */
  2272. +            /* can have local ids, before code scope
  2273. +               changes  */
  2274. +             restore_ids() ;
  2275. +             if (scope == SCOPE_FUNCT)
  2276. +                     { scope = SCOPE_MAIN ; 
  2277. +               active_funct = (FBLOCK*) 0 ;
  2278. +             }
  2279. +             code_ptr = main_code_ptr ;
  2280. +                  }
  2281. +          ;
  2282. X  
  2283. X  /* a call to a user defined function */
  2284. *** mawk/parse2.xc    Tue Mar  3 17:23:38 1992
  2285. --- mawk112/parse2.xc    Tue Apr  7 12:56:32 1992
  2286. ***************
  2287. *** 11,16 ****
  2288. X  ********************************************/
  2289. X  
  2290. ! /* $Log:    parse2.xc,v $
  2291. ! Revision 5.1  91/12/05  07:52:38  brennan
  2292. X  1.1 pre-release
  2293. X  
  2294. --- 11,16 ----
  2295. X  ********************************************/
  2296. X  
  2297. ! /* $Log: parse2.xc,v $
  2298. ! Revision 5.1  1991/12/05  07:52:38  brennan
  2299. X  1.1 pre-release
  2300. X  
  2301. *** mawk/patchlev.h    Tue Mar  3 17:29:14 1992
  2302. --- mawk112/patchlev.h    Wed Aug 26 20:06:41 1992
  2303. ***************
  2304. *** 1,3 ****
  2305. X  /* mawk 1.1 */
  2306. ! #define  PATCHLEVEL    1
  2307. ! #define  PATCH_STRING    ".1"
  2308. --- 1,3 ----
  2309. X  /* mawk 1.1 */
  2310. ! #define  PATCHLEVEL    2
  2311. ! #define  PATCH_STRING    ".2"
  2312. *** mawk/print.c    Tue Mar  3 17:29:16 1992
  2313. --- mawk112/print.c    Mon Aug 17 07:19:34 1992
  2314. ***************
  2315. *** 11,19 ****
  2316. X  ********************************************/
  2317. X  
  2318. ! /* $Log:    print.c,v $
  2319. !  * Revision 5.2  92/02/24  10:52:16  brennan
  2320. X   * printf and sprintf() can now have more args than % conversions
  2321. X   * removed HAVE_PRINTF_HD -- it was too obscure
  2322. !  * 
  2323. X   * Revision 5.1  91/12/05  07:56:22  brennan
  2324. X   * 1.1 pre-release
  2325. --- 11,22 ----
  2326. X  ********************************************/
  2327. X  
  2328. ! /* $Log: print.c,v $
  2329. !  * Revision 5.3  1992/08/17  14:23:21  brennan
  2330. !  * patch2: After parsing, only bi_sprintf() uses string_buff.
  2331. !  *
  2332. !  * Revision 5.2  1992/02/24  10:52:16  brennan
  2333. X   * printf and sprintf() can now have more args than % conversions
  2334. X   * removed HAVE_PRINTF_HD -- it was too obscure
  2335. !  *
  2336. X   * Revision 5.1  91/12/05  07:56:22  brennan
  2337. X   * 1.1 pre-release
  2338. ***************
  2339. *** 38,41 ****
  2340. --- 41,47 ----
  2341. X  char *sprintf_buff = string_buff ;
  2342. X  char *sprintf_limit = string_buff + SPRINTF_SZ ;
  2343. + /* Once execute() starts the sprintf code is (belatedly) the only
  2344. +    code allowed to use string_buff  */
  2345. X  
  2346. X  static void print_cell(p, fp)
  2347. *** mawk/re_cmpl.c    Tue Mar  3 17:23:42 1992
  2348. --- mawk112/re_cmpl.c    Tue Apr  7 12:56:33 1992
  2349. ***************
  2350. *** 11,18 ****
  2351. X  ********************************************/
  2352. X  
  2353. ! /* $Log:    re_cmpl.c,v $
  2354. !  * Revision 5.1  91/12/05  07:56:25  brennan
  2355. X   * 1.1 pre-release
  2356. !  * 
  2357. X  */
  2358. X  
  2359. --- 11,18 ----
  2360. X  ********************************************/
  2361. X  
  2362. ! /* $Log: re_cmpl.c,v $
  2363. !  * Revision 5.1  1991/12/05  07:56:25  brennan
  2364. X   * 1.1 pre-release
  2365. !  *
  2366. X  */
  2367. X  
  2368. *** mawk/regexp.h    Tue Mar  3 17:23:42 1992
  2369. --- mawk112/regexp.h    Tue Apr  7 12:56:34 1992
  2370. ***************
  2371. *** 11,18 ****
  2372. X  ********************************************/
  2373. X  
  2374. ! /*$Log:    regexp.h,v $
  2375. !  * Revision 5.1  91/12/05  07:59:30  brennan
  2376. X   * 1.1 pre-release
  2377. !  * 
  2378. X  */
  2379. X  
  2380. --- 11,18 ----
  2381. X  ********************************************/
  2382. X  
  2383. ! /*$Log: regexp.h,v $
  2384. !  * Revision 5.1  1991/12/05  07:59:30  brennan
  2385. X   * 1.1 pre-release
  2386. !  *
  2387. X  */
  2388. X  
  2389. *** mawk/repl.h    Tue Mar  3 17:23:42 1992
  2390. --- mawk112/repl.h    Tue Apr  7 12:56:35 1992
  2391. ***************
  2392. *** 11,18 ****
  2393. X  ********************************************/
  2394. X  
  2395. ! /*$Log:    repl.h,v $
  2396. !  * Revision 5.1  91/12/05  07:59:32  brennan
  2397. X   * 1.1 pre-release
  2398. !  * 
  2399. X  */
  2400. X  
  2401. --- 11,18 ----
  2402. X  ********************************************/
  2403. X  
  2404. ! /*$Log: repl.h,v $
  2405. !  * Revision 5.1  1991/12/05  07:59:32  brennan
  2406. X   * 1.1 pre-release
  2407. !  *
  2408. X  */
  2409. X  
  2410. *** mawk/scan.c    Tue Mar  3 17:29:20 1992
  2411. --- mawk112/scan.c    Wed Jul  8 08:40:16 1992
  2412. ***************
  2413. *** 12,19 ****
  2414. X  
  2415. X  
  2416. ! /* $Log:    scan.c,v $
  2417. !  * Revision 5.2  92/02/21  14:16:53  brennan
  2418. X   * fix:  getline <=
  2419. !  * 
  2420. X   * Revision 5.1  91/12/05  07:56:27  brennan
  2421. X   * 1.1 pre-release
  2422. --- 12,22 ----
  2423. X  
  2424. X  
  2425. ! /* $Log: scan.c,v $
  2426. !  * Revision 5.3  1992/07/08  15:43:41  brennan
  2427. !  * patch2: length returns.  I am a wimp
  2428. !  *
  2429. !  * Revision 5.2  1992/02/21  14:16:53  brennan
  2430. X   * fix:  getline <=
  2431. !  *
  2432. X   * Revision 5.1  91/12/05  07:56:27  brennan
  2433. X   * 1.1 pre-release
  2434. ***************
  2435. *** 555,558 ****
  2436. --- 558,573 ----
  2437. X                        current_token = BUILTIN ;
  2438. X                        break ;
  2439. +                 case  ST_LENGTH  :
  2440. +               yylval.bip = stp->stval.bip ;
  2441. +               /* check for length alone, this is an ugly
  2442. +              hack */
  2443. +                       while ( scan_code[ c = next() ] == SC_SPACE ) ;
  2444. +                       un_next() ;
  2445. +               current_token = c == '(' ? BUILTIN : LENGTH ;
  2446. +               break ;
  2447. X  
  2448. X                  case  ST_FIELD  :
  2449. *** mawk/scan.h    Tue Mar  3 17:23:44 1992
  2450. --- mawk112/scan.h    Tue Apr  7 12:56:36 1992
  2451. ***************
  2452. *** 12,19 ****
  2453. X  
  2454. X  
  2455. ! /* $Log:    scan.h,v $
  2456. !  * Revision 5.1  91/12/05  07:59:33  brennan
  2457. X   * 1.1 pre-release
  2458. !  * 
  2459. X  */
  2460. X  
  2461. --- 12,19 ----
  2462. X  
  2463. X  
  2464. ! /* $Log: scan.h,v $
  2465. !  * Revision 5.1  1991/12/05  07:59:33  brennan
  2466. X   * 1.1 pre-release
  2467. !  *
  2468. X  */
  2469. X  
  2470. *** mawk/sizes.h    Tue Mar  3 17:23:48 1992
  2471. --- mawk112/sizes.h    Wed Aug 26 20:20:29 1992
  2472. ***************
  2473. *** 2,6 ****
  2474. X  /********************************************
  2475. SHAR_EOF
  2476. true || echo 'restore of diffs2 failed'
  2477. fi
  2478. echo 'End of  part 1'
  2479. echo 'File diffs2 is continued in part 2'
  2480. echo 2 > _shar_seq_.tmp
  2481. exit 0
  2482.  
  2483. exit 0 # Just in case...
  2484.